package com.wongoing.sys.action;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.wongoing.base.PageResult;
import com.wongoing.sys.model.SysApp;
import com.wongoing.sys.service.SysAppService;
import com.wongoing.sys.viewmodel.JsonResult;
import com.wongoing.util.LogService;
import com.wongoing.util.ModelAndViewConstants;
import com.wongoing.util.PageUtil;
import com.wongoing.util.Status;

@Controller
@RequestMapping("/sys/sysAppAction")
public class SysAppAction extends BaseAction{
private SysAppService service;
	
	
	@Autowired
	public void setService(SysAppService service) {
		this.service = service;
	}
	

	/**
	 * 功能说明：进入app列表操作，分页数据显示
	 * 功能名称：toList
	 * @author zhenglibing
	 * @date 2017年10月15日 下午12:17:52
	 * @param pageSize 每页记录数
	 * @param pageCurrent 当前页索引
	 * @param orderField 排序字段
	 * @param orderDirection 排序方向
	 * @param paramField 参数字段
	 * @param paramValue 参数值
	 * @return 返回json对象
	 */
	@RequestMapping(value="/toList")
	public ModelAndView toList(Integer pageSize, Integer pageCurrent, String orderField, String orderDirection,
			String paramAppName, String paramRemark) {
		ModelAndView mv = null;
		try {
			
			PageResult<SysApp> pageResult = PageUtil.pageSet(this.getClass(), pageSize, pageCurrent, orderField, orderDirection);
			
			//模糊查询判断
			List<Boolean> multiFuzzyQuery = new ArrayList<Boolean>();
			if (paramAppName != null && !"".equals(paramAppName)) {
				pageResult.getParam().put("appName", paramAppName);
				pageResult.setOrderField("sa.appName");
				pageResult.setOrderDirection("DESC");
				pageResult.getExt().put("paramAppName", paramAppName);
				multiFuzzyQuery.add(true);
			}else{
				multiFuzzyQuery.add(false);
			}
			if (paramRemark != null && !"".equals(paramRemark)) {
				pageResult.getParam().put("remark", paramRemark);
				pageResult.setOrderField("sa.remark");
				pageResult.setOrderDirection("DESC");
				pageResult.getExt().put("paramRemark", paramRemark);
				multiFuzzyQuery.add(true);
			}else{
				multiFuzzyQuery.add(false);
			}
			
			if(PageUtil.multiFuzzyQuery(multiFuzzyQuery)){
				pageResult.setOrderField("sa.Id");
				pageResult.setOrderDirection("ASC");
			}
			pageResult = this.service.getAppListPageResult(pageResult);
			mv = new ModelAndView();
			mv.addObject(ModelAndViewConstants.PAGE_RESULT, pageResult);
			mv.setViewName(ModelAndViewConstants.APP_MAIN_VIEW);
			LogService.getInstance(this).debug("获取版本分页数据成功："+ModelAndViewConstants.APP_MAIN_VIEW);
		}
		catch(Exception ex) {
			LogService.getInstance(this).error("获取版本分页数据失败：" + ex.getMessage(), ex);
			mv = new ModelAndView(ModelAndViewConstants.ERROR_VIEW);
		}
		return mv;
	}
	/**
	 * 功能说明：进入备注验证界面操作
	 * 修改说明：
	 * @author zhenglibing
	 * @date 2017年10月15日 下午12:19:47
	 * @param op
	 * @param remark
	 * @param original
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value="/doAppRemarkValidate")
	public Map<String,Object> doAppRemarkValidate(String op,String remark, String original){
		
		    Map<String,Object> jsonResult = null;
		    try{
		    	if(ModelAndViewConstants.OPERATION_VALUE_EDIT.equals(op)){
		    boolean flag=true;
		    System.out.println("op的值"+op+"   original的值"+original+"  remark的值"+remark);
		    String[] ArrRemark=remark.split("<br/>|<br>");
		    for (int i = 0; i < ArrRemark.length; i++) {
				String string = ArrRemark[i];
				System.out.println("string的长度"+string.length());
				if(string.length()>15 ){
					flag=false;
				}
				System.out.println("remark中的值"+string);
			}
		    if(flag==true){
		    	jsonResult = JsonResult.jsonValidateReturn(true, "验证通过,该备注可以使用");
		    	LogService.getInstance(this).debug("备注验证通过，可使用");  
		    }
		    else{
			jsonResult = JsonResult.jsonValidateReturn(flag, "每行字数必须在15以内");}
			LogService.getInstance(this).error("该备注不可使用");
		    }
	} catch (Exception e) {
		jsonResult = JsonResult.jsonValidateReturn(false, "验证失败");
		LogService.getInstance(this).error("备注名称验证失败");
	}
		return jsonResult;
	}
	/**
	 * 功能说明：进入添加界面操作
	 * 修改说明：
	 * @author zhenglibing
	 * @date 2017年10月15日 下午12:20:14
	 * @return
	 */
	@RequestMapping(value="/toAdd")
	public ModelAndView toAdd(){
		ModelAndView mv = null;
		try {
			Map<String,Object> param = new HashMap<String, Object>();	
			mv = new ModelAndView();
			mv.addObject(ModelAndViewConstants.OPERATION_KEY,ModelAndViewConstants.OPERATION_VALUE_ADD);
			mv.addObject(ModelAndViewConstants.TITLE_KEY, "添加版本信息");
			mv.setViewName(ModelAndViewConstants.APP_EDIT_VIEW);
			LogService.getInstance(this).error("进入版本添加功能成功：" +ModelAndViewConstants.APP_EDIT_VIEW);
		}
		catch(Exception ex) {
			LogService.getInstance(this).error("进入版本添加失败：" + ex.getMessage(), ex);
			mv = new ModelAndView("redirect:/error.jsp");
		}
		return mv;
	}
	/**
	 * 功能说明：进入编辑操作
	 * 修改说明：
	 * @author zhenglibing
	 * @date 2017年10月15日 下午12:20:35
	 * @param id
	 * @return
	 */
	@RequestMapping(value="/toEdit")
	public ModelAndView toEdit(Integer id) {
		ModelAndView mv = null;
		try {
			SysApp app = this.service.getByPrimaryKey(id);
			System.out.println("app中remark的值"+app.getRemark());
			String[] ArrRemark=app.getRemark().split("<br/>");
		    StringBuffer sb = new StringBuffer();
		    for(int i = 0; i < ArrRemark.length; i++){
		     sb. append(ArrRemark[i]);
		    }
		    String s = sb.toString();
		    app.setRemark(s);
			Map<String,Object> param = new HashMap<String, Object>();
			mv = new ModelAndView();
			mv.addObject(ModelAndViewConstants.OPERATION_KEY,ModelAndViewConstants.OPERATION_VALUE_EDIT);
			mv.addObject(ModelAndViewConstants.TITLE_KEY, "修改版本信息");
			mv.addObject(ModelAndViewConstants.APP_MODEL, app);
			mv.setViewName(ModelAndViewConstants.APP_EDIT_VIEW);
		}
		catch(Exception ex) {
			LogService.getInstance(this).error("进入版本编辑失败：" + ex.getMessage(), ex);
			mv = new ModelAndView(ModelAndViewConstants.ERROR_VIEW);
		}
		return mv;
	}
	/**
	 * 功能说明：执行保存操作
	 * 修改说明：
	 * @author zhenglibing
	 * @date 2017年10月15日 下午12:20:55
	 * @param entity app信息实体
	 * @param op op=add为添加操作，op=edit为编辑操作
	 * @return 返回json对象
	 */
	@ResponseBody
	@RequestMapping(value="/doSave")
	public Map<String, Object> doSave(SysApp entity, String op) {
		System.out.println("entity中remark的值"+entity.getRemark());
		String flag="<br/>";
		String[] ArrRemark=entity.getRemark().split("");
		List<String> list = java.util.Arrays.asList(ArrRemark);
		List<String> l=new ArrayList<String>(list);
		for (int i = 0; i < l.size(); i++) {
			if(l.get(i).equals("\n")){
				l.set(i,flag);
			}
		}
	    int size=list.size(); 
	    String[] array = (String[])l.toArray(new String[size]); 
	    
	    StringBuffer sb = new StringBuffer();
	    for(int i = 0; i < array.length; i++){
	     sb. append(array[i]);
	    }
	    String s = sb.toString();
	    entity.setRemark(s);
		System.out.println("entity中remark的值"+entity.getRemark());
		Map<String, Object> jsonResult = null;
		try {
			String tabid = tabid(ModelAndViewConstants.APP_SYS_ID);
			Date now = new Date();				
			Subject subject = SecurityUtils.getSubject();
			String appname = subject.getPrincipal().toString();
			Map<String, Object> param = new HashMap<String, Object>();
			param.put("appname", appname);
			if (null == op || ModelAndViewConstants.OPERATION_VALUE_ADD.equals(op)) {
			
				int count = this.service.insert(entity);
				if (count > 0) {
					LogService.getInstance(this).debug("添加版本信息成功!");
				}
			}
			else {
				int count = this.service.updateByPrimaryKey(entity);
				if (count > 0) {
					LogService.getInstance(this).debug("编辑版本信息成功!");
				}
			}
			Integer statusCode = 200;
			String msg = "版本信息保存成功";
			jsonResult = JsonResult.jsonReturn(statusCode, msg, tabid);
		}
		catch(Exception ex) {
			LogService.getInstance(this).error("保存版本信息失败：" + ex.getMessage(), ex);
			String msg =  "保存版本信息失败：" + ex.getMessage();
			jsonResult = JsonResult.jsonReturnErr(msg);
		}
		return jsonResult;
	}
	/**
	 * 功能说明：执行删除操作
	 * 修改说明：
	 * @author zhenglibing
	 * @date 2017年10月15日 下午12:21:33
	 * @param id 用户id，主键值
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value="/doDel")
	public Map<String, Object> doDel(Integer id) {
		Map<String, Object> result = null;
		try {
			SysApp entity = new SysApp();
			entity.setId(id);
		
			int count = this.service.deleteByPrimaryKey(entity);
			if (count > 0) {
				LogService.getInstance(this).debug("删除版本信息成功!");
			}
			String msg = "删除成功!";
			String tabid = tabid(ModelAndViewConstants.APP_SYS_ID);
			result = JsonResult.jsonReturn(Status.OK.getCode(), msg, tabid,false,"","");
		}
		catch(Exception ex) {
			LogService.getInstance(this).error("删除版本信息[" + id + "]失败：" + ex.getMessage(), ex);
			String msg =  "删除版本信息[" + id + "]失败：" + ex.getMessage();
			result = JsonResult.jsonReturnErr(msg);
		}
		return result;
	}
}
